const otherTool = require('./other');

function timestampConvert(fmt, timestamp) {
    const cnDigital = ['日', '一', '二', '三', '四', '五', '六'];
    const date = new Date(timestamp);
    const o = {
        'M+': date.getMonth() + 1, // 月份
        'd+': date.getDate(), // 日
        'h+': date.getHours(), // 小时
        'm+': date.getMinutes(), // 分
        's+': date.getSeconds(), // 秒
        'w+': date.getDay(), // 周几(阿拉伯数字)
        'W+': cnDigital[date.getDay()], // 周几(中文)
        'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
        S: date.getMilliseconds() // 毫秒
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
    for (const k in o) {
        if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
    }
    return fmt;
}

/**
 * @Description 获取当前时间戳
 * @author 53010
 * @date 2020/7/27 15:39
 * @return {Number} 时间戳(秒)
 */
function getCurrentTimestamp() {
    return Math.round(new Date().getTime() / 1000);
}

/**
 * 获取某个月的总天数
 */
function getDaysOfMonth(year, month) {
    const date = new Date(year, month, 0);
    return date.getDate();
}

function formatSeconds(value) {
    let secondTime = parseInt(value);
    let minuteTime = 0;// 分
    let hourTime = 0;// 小时
    let dayTime = 0;
    if (secondTime > 60) { // 如果秒数大于60，将秒数转换成整数
        // 获取分钟，除以60取整数，得到整数分钟
        minuteTime = parseInt(secondTime / 60);
        // 获取秒数，秒数取佘，得到整数秒数
        secondTime = parseInt(secondTime % 60);
        // 如果分钟大于60，将分钟转换成小时
        if (minuteTime > 60) {
            // 获取小时，获取分钟除以60，得到整数小时
            hourTime = parseInt(minuteTime / 60);
            // 获取小时后取佘的分，获取分钟除以60取佘的分
            minuteTime = parseInt(minuteTime % 60);
        }
        if (hourTime > 24) {
            dayTime = parseInt(hourTime / 24);
            hourTime = parseInt(hourTime % 24);
        }
    }
    let result = '' + otherTool.fillNumberPrefix(2, parseInt(secondTime));

    if (minuteTime > 0) {
        result = '' + otherTool.fillNumberPrefix(2, parseInt(minuteTime)) + ':' + result;
    }
    if (hourTime > 0) {
        result = '' + parseInt(hourTime) + ':' + result;
    }
    if (dayTime > 0) {
        result = '' + parseInt(dayTime) + '天 ' + result;
    }
    return result;
}

// 获取指定日期时间的时间戳 如time='12:00'
function getTimestamp(time, timeStamp) {
    timeStamp = timeStamp || new Date().getTime();
    const dateString = timestampConvert('yyyy-MM-dd', timeStamp);
    const date = new Date(dateString + ' ' + time);
    console.log(date.getTime() / 1000);
    return date.getTime();
}
/**
 * 时间戳转为多久之前，类似评论：xx分钟前，xx小时前
 * @param dateTime
 */
function timeAgo(dateTime = null) {
    // 如果为null,则格式化当前时间
    if (!dateTime) dateTime = Number(new Date());
    // 如果dateTime长度为10或者13，则为秒和毫秒的时间戳，如果超过13位，则为其他的时间格式
    if (dateTime.toString().length === 10) dateTime *= 1000;
    const timestamp = +new Date(Number(dateTime));
    const timer = (Number(new Date()) - timestamp) / 1000;
    // 如果小于1分钟,则返回"刚刚",其他以此类推
    let tips = '';
    switch (true) {
        case timer < 60:
            tips = '刚刚';
            break;
        case timer >= 60 && timer < 3600:
            tips = parseInt(timer / 60) + '分钟前';
            break;
        case timer >= 3600 && timer < 86400:
            tips = parseInt(timer / 3600) + '小时前';
            break;
        case timer >= 86400 && timer < 2592000:
            tips = parseInt(timer / 86400) + '天前';
            break;
        default:
            if (timer >= 2592000 && timer < 365 * 86400) {
                tips = parseInt(timer / (86400 * 30)) + '个月前';
            } else {
                tips = parseInt(timer / (86400 * 365)) + '年前';
            }
    }
    return tips;
}
module.exports = {
    timestampConvert,
    getCurrentTimestamp,
    getDaysOfMonth,
    formatSeconds,
    getTimestamp,
    timeAgo
};
